#ifndef ZLBASE_CAPIINITIALIZE_H_
#define ZLBASE_CAPIINITIALIZE_H_

#include <cstddef>
#include <cstdint>

#include "zlbase/global.h"

namespace zl
{
namespace zlbase
{
/// \brief 插件信息
struct PluginInfo
{
    int32_t type;
    char name[1024];
    char version[1024];
    char uuid[1024];
    char filename[1024];

    PluginInfo() :
        type(0),
        name(""),
        version(""),
        uuid(""),
        filename("") {}
};

/// \brief 提供一些用于访问库信息的接口
///
/// 以静态函数的方式提供接口，避免了以 extern "C"的方式导出接口
class ZLBASE_API ZLApiInstance
{
public:
    /// \brief 获取API的版本信息
    static const char *Version();

    /// \brief 获取插件列表
    ///
    /// \param[in] plugin_list 插件数组（应包含足够的空间用来保存数据）
    /// \param[in] max_size 可接受的最大插件数量
    /// \return 实际获取到的插件数量
    static size_t GetPlugins(PluginInfo *plugin_list, size_t max_size);
};

}  // namespace zlbase
}  // namespace zl
#endif  // ZLBASE_CAPIINITIALIZE_H_
